package com.sondon.mayi.application;

import java.io.File;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;

import org.androidannotations.annotations.EApplication;
import org.androidannotations.annotations.sharedpreferences.Pref;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;

import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.utils.StorageUtils;
import com.sondon.mayi.activity.MainTabActivity_;
import com.sondon.mayi.util.LogUtil;
import com.sondon.mayi.util.MyPrefs_;
import com.sondon.mayi.util.ToastUtils;
import com.umeng.message.PushAgent;
import com.umeng.message.UHandler;
import com.umeng.message.UTrack;
import com.umeng.message.UmengNotificationClickHandler;
import com.umeng.message.entity.UMessage;

/**
 * 
 * @Project : Fruit
 * @Package : com.sondon.mayi.application
 * @Class : ProjectApplication
 * @Company 广州讯动网络科技有限公司
 * @Author : 蔡文锋
 * @DateTime：2015年5月30日 下午11:50:32
 * @Blog：http://blog.csdn.net/caiwenfeng_for_23
 * @Description : { ProjectApplication }
 *
 */
@EApplication
public class ProjectApplication extends Application {
	private List<Activity> activityList = new LinkedList<Activity>();
	public static SharedPreferences preferences=null;
	public PushAgent mPushAgent ;
	@Pref
	MyPrefs_ myprefs;
	
	@Override
	public void onCreate() {
		super.onCreate();
		preferences=getApplicationContext().getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
		//初始化ImageLoader
		initImageLoader(getApplicationContext());
		//初始化Umeng推送
		initUmengNotification();
	}
	
	@Override
	public void onTerminate() {
		super.onTerminate();
		// 整体摧毁的时候调用这个方法
	}

	
	// 添加activity到list
	public void addActivity(Activity activity) {
//		activityList.add(activity);
	}

	// 退出app
	public void exit() {
		LogUtil.e("ObjectApplication", "exit......");
		for (Activity activity : activityList) {
			activity.finish();
		}
	}

	/**
	 * 
	* @Author 蔡文锋
	* @Data_Time 2015年7月9日  下午8:14:18
	* @Description {  Umeng推送 }
	 */
	public void initUmengNotification(){
		 LogUtil.e("Umeng...", "umeng  init....");
		// 初始化Umeng推送
		mPushAgent = PushAgent.getInstance(getApplicationContext());
		mPushAgent.enable();
		
		/**
		 * 该Handler是在BroadcastReceiver中被调用，故
		 * 如果需启动Activity，需添加Intent.FLAG_ACTIVITY_NEW_TASK
		 * */
		UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler(){
		    
		    @Override
		    public void launchApp(final Context context, final UMessage msg) {
				new Handler(getMainLooper()).post(new Runnable() {
					@Override
					public void run() {
						if(msg==null||msg.extra==null||msg.extra.size()==0){
							return;
						}
						
						myprefs.position().put(1);
						Intent intent = new Intent(context,MainTabActivity_.class);
						intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
						for (Entry<String, String> entry : msg.extra.entrySet()) {
							String key = entry.getKey();
							String value = entry.getValue();
							 if ("code".equals(key.trim())) {
							 LogUtil.e("Umeng...launchApp","key  :"+key+"    value :"+value);
							 Bundle bundle=new Bundle();
							 bundle.putString("news_code",value);
							 intent.putExtras(bundle);
							 }
						}
						context.startActivity(intent);
					}
				});
			}
		    
//		    @Override
//		    public void openUrl(Context context, UMessage msg){
//		    	ToastUtils.show(context, msg.custom);
//		        LogUtil.e("Umeng...openUrl :", msg.custom);
//		    };
//		    
//		    @Override
//		    public void openActivity(Context context, UMessage msg){
//		    	ToastUtils.show(context, msg.custom);
//		        LogUtil.e("Umeng... openActivity :", msg.custom);
//		    };
//		    
//		    @Override
//		    public void dealWithCustomAction(final Context context, final UMessage msg) {
//		        ToastUtils.show(context, msg.custom);
//		        LogUtil.e("Umeng... dealWithCustomAction:", msg.custom);
//		    }
		};
		
		mPushAgent.setNotificationClickHandler(notificationClickHandler);
	}
	
	
	/**
	 * 
	 * @Author 蔡文锋
	 * @Data_Time 2015年5月30日 下午11:50:39
	 * @Description {}
	 * @param context
	 */
	public static void initImageLoader(Context context) {
		File cacheDir = StorageUtils.getOwnCacheDirectory(context,
				"Fruit/Cache");// 获取到缓存的目录地址
		// Log.e("cacheDir", cacheDir.getPath());
		// 创建配置ImageLoader(所有的选项都是可选的,只使用那些你真的想定制)，这个可以设定在APPLACATION里面，设置为全局的配置参数
		ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
				context)
				.memoryCacheExtraOptions(480, 800)
				// max width, max height，即保存的每个缓存文件的最大长宽
				// .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75,
				// null) // Can slow ImageLoader, use it carefully (Better don't
				// use it)设置缓存的详细信息，最好不要设置这个
				.threadPoolSize(3)
				// 线程池内加载的数量
				.threadPriority(Thread.NORM_PRIORITY - 2)
				// 线程优先级
				.denyCacheImageMultipleSizesInMemory()
				// .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 *
				// 1024)) // You can pass your own memory cache
				// implementation你可以通过自己的内存缓存实现
				// .memoryCacheSize(2 * 1024 * 1024)
				.diskCacheSize(50 * 1024 * 1024)
				.diskCacheFileNameGenerator(new Md5FileNameGenerator())// 将保存的时候的URI名称用MD5
				// 加密
				// .discCacheFileNameGenerator(new
				// HashCodeFileNameGenerator())//将保存的时候的URI名称用HASHCODE加密
				.tasksProcessingOrder(QueueProcessingType.LIFO)
				// .discCacheFileCount(100) //缓存的File数量
				.diskCache(new UnlimitedDiskCache(cacheDir))// 自定义缓存路径
				// .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
				// .imageDownloader(new BaseImageDownloader(context, 5 * 1000,
				// 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间
				.writeDebugLogs() // Remove for release app
				.build();
		// Initialize ImageLoader with configuration.
		ImageLoader.getInstance().init(config);// 全局初始化此配置
	}
}
